package io.io2;

import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

/**
 * 缓冲流写出是的缓冲区问题
 */
public class FlushDemo {
    public static void main(String[] args) throws IOException {
        /**
         * 通过缓冲流写出的数据会被临时存入缓冲流内部的字节数组中
         * 直到数组存满数据时猜会被真实写出一次
         * 通过缓冲输出流的flush()方法会强制将缓冲流中已经缓冲的时间一次性写出
         *
         * fulsh()方法是在接口Fulshable中定义的
         * 而字节输出流的超类OutputStrea实现了该接口
         * 这意味着所有字节输出流都具有该方法
         * 但是只有缓冲流真正实现了flush()应有功能
         * 其他高级流flush()方法都是调用其他连接的流的flush(),将该动作传递下去
         */
        FileOutputStream fos=new FileOutputStream("bos.txt");
        BufferedOutputStream bos=new BufferedOutputStream(fos);
        String line="\n阿芬说我是光头强";
        byte[] data=line.getBytes(StandardCharsets.UTF_8);
        bos.write(data);
        fos.write("阿芬爱上了安全".getBytes(StandardCharsets.UTF_8));
        System.out.println("写出完毕！");
        bos.flush();//强制将存在缓冲数组的内容强制输出
        bos.close();//

    }
}
